#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include<windows.h>
#include<time.h>

#define high 60     //定义游戏画面尺寸
#define width 200

//全局变量
int cells[high][width];


void gotoxy(int x,int y)//光标移动到（x，y）位置
{
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD pos;
	pos.X = x;
	pos.Y = y;
	SetConsoleCursorPosition(handle,pos);
}

void HideCursor()
{
	CONSOLE_CURSOR_INFO cursor_info = {1,0}; // 第二个值为0表示隐藏光标
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}

void satrtup()//数据初始化
{
	int i,j;
	for(i=0;i<high;i++)
		for (j=0;j<width;j++)
			cells[i][j]=rand()%2;
	
}
void show()//显示画面
{
	gotoxy(0,0); // 光标移动到原点位置，以下重画清屏
	
	int i,j;
	for(i=0;i<high;i++)
	{
		for (j=0;j<width;j++)
		{
			if(cells[i][j]==1)
				printf("*");
			else
				printf(" ");	
		}
		printf("\n");
	}
		
}
void updateWithoutInput()//与用户输入无关的更新
{
	int i,j;
	int tempcells[high][width]={1};  //临时存储的数组 
	int neibournumber=0;
	
	for(i=0;i<high;i++)
		for (j=0;j<width;j++)
			tempcells[i][j]=cells[i][j];
			 
	for(i=1;i<high-1;i++)
	{
		for (j=1;j<width-1;j++)
		{
			neibournumber=cells[i-1][j-1]+cells[i-1][j]+cells[i-1][j+1]
							+cells[i][j-1]+cells[i][j]+cells[i][j+1]
							+cells[i+1][j-1]+cells[i+1][j]+cells[i+1][j+1];
			if(neibournumber==3)
				tempcells[i][j]=1;
			else if(neibournumber==2||neibournumber==4)
				tempcells[i][j]=cells[i][j];
			else 
				tempcells[i][j]=0;
		}
	}
	
	for(i=0;i<high;i++)
		for (j=0;j<width;j++)
			cells[i][j]=tempcells[i][j];

}
void updateWithInput()//与用户输入有关的更新
{

}
int main() 
{
	satrtup();//数据初始化
    while(1)//游戏循环执行
	{
		show();//显示画面
		updateWithoutInput();//与用户输入无关的更新
		updateWithInput();//与用户输入有关的更新
	}
	return 0;
}
